package com.banyiyi.simple.pattern.proxy;


import com.banyiyi.simple.pattern.annotation.LogAround;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @ClassName DatabaseHandler
 * @Description 数据库操作动态代理，输出操作信息
 * @Author yangwm
 * @Date 2023/2/9 14:56
 * @Version 1.0
 */
public class DatabaseHandler implements InvocationHandler {

    private Database database;

    // 构造器，传入数据库
    public DatabaseHandler(Database database) {
        this.database = database;
    }

    // 获取代理
    public Database getProxy() {
        return (Database) Proxy.newProxyInstance(this.getClass().getClassLoader(), database.getClass().getInterfaces(),this);
    }

    // 日志信息
    @LogAround
    private void getLog(String databaseName,String methodName){
        System.out.println("调用了 "+databaseName+"数据库的 "+ methodName +" 方法");
    }

    // 动态代理操作
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        getLog(database.getClass().getName(),method.getName());
        return method.invoke(database, args);
    }
}
